import { LoggerComponent } from '../../components';
import { HintTipInfo } from '../../declarations';

/**
 * - 作者: DoooReyn
 * - 日期: 2023.11.02
 * - 名称: HintTip
 * - 描述: 提示基类
 * - 说明: 提示需要在几秒后消失
 */
export class HintTip extends LoggerComponent {
    /**
     * 显示提示
     * @param tip 提示文本
     * @param duration 持续时间
     * @returns
     */
    public async show(cfg: HintTipInfo): Promise<void> {
        cfg.duration ??= 2;
        this.setTip(cfg.tip);
        await this.onTransitionEnter();
        return new Promise<void>((resolve) => {
            this.scheduleOnce(async () => {
                await this.hide();
                resolve();
            }, cfg.duration);
        });
    }

    /** 移除提示 */
    public async hide() {
        await this.onTransitionExit();
        this.node.destroy();
    }

    /**
     * 设置提示文本
     * @param tip 提示文本
     * @description 根据需要重写此方法
     */
    protected setTip(tip: string): void {}

    /**
     * 进入表现
     * @description 根据需要重写此方法
     */
    protected async onTransitionEnter(): Promise<void> {}

    /**
     * 退出表现
     * @description 根据需要重写此方法
     */
    protected async onTransitionExit(): Promise<void> {}
}
